﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Osiptel.HECO.BE;
using System.Data.OracleClient;
using System.Data;

namespace Osiptel.HECO.DL
{
    public class ProyectoDL
    {
        public ProyectoBE Obtener(int pIDProyecto)
        {
            try
            {
                using (OracleCommand cmd = new OracleCommand())
                {
                    cmd.CommandText = "PKG_HECO_GLOBAL.SP_OBTENER_PROYECTO";
                    cmd.CommandType = System.Data.CommandType.StoredProcedure;

                    OracleParameter prm1 = new OracleParameter("pIdProyecto", OracleType.Int32);
                    OracleParameter prm2 = new OracleParameter("oListado", OracleType.Cursor);
                    prm1.Direction = ParameterDirection.Input;
                    prm2.Direction = ParameterDirection.Output;
                    prm1.Value = pIDProyecto;
                    cmd.Parameters.Add(prm1);
                    cmd.Parameters.Add(prm2);

                    using (DL_CONEXION NewDL_CONEXION = new DL_CONEXION())
                    {
                        try
                        {
                            NewDL_CONEXION.retOpen();
                            cmd.Connection = NewDL_CONEXION.retConexion();
                            ProyectoBE objConsultaBE = new ProyectoBE();
                            using (OracleDataReader oRead = cmd.ExecuteReader())
                            {
                                if (oRead.Read())
                                {
                                    objConsultaBE.IdProyecto =Convert.ToInt32( oRead.GetValue(oRead.GetOrdinal("idproyecto")));
                                    objConsultaBE.Nombre = Convert.ToString(oRead.GetValue(oRead.GetOrdinal("nombre")));
                                    objConsultaBE.Descripcion = Convert.ToString(oRead.GetValue(oRead.GetOrdinal("descripcion")));
                                    objConsultaBE.P03TipoProyecto = Convert.ToInt32(oRead.GetValue(oRead.GetOrdinal("p03tipoproyecto")));
                                    objConsultaBE.P03TipoProyectoDesc = Convert.ToString(oRead.GetValue(oRead.GetOrdinal("p03tipoproyectoDesc")));
                                }
                                oRead.Close();
                            }
                            NewDL_CONEXION.retClose();
                            return objConsultaBE;
                        }
                        catch (Exception ex)
                        {
                            throw ex;
                        }

                        finally
                        {
                            if (NewDL_CONEXION.conexion.State == ConnectionState.Open) NewDL_CONEXION.retClose();

                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public List<ProyectoBE> FListarProyectos(int pagina,int regxpagina)
        {
            using (DL_CONEXION NewConexion = new DL_CONEXION())
            {
                try
                {
                    NewConexion.retOpen();
                    OracleCommand cmd = NewConexion.retConexion().CreateCommand();
                    cmd.CommandText = "PKG_HECO_GLOBAL.SP_LISTAR_PROYECTO_PAGINADO";
                    cmd.CommandType = CommandType.StoredProcedure;

                    OracleParameter prm1 = new OracleParameter("pagina", OracleType.Int32);
                    OracleParameter prm2 = new OracleParameter("tamanio", OracleType.Int32);
                    OracleParameter prm3 = new OracleParameter("oListado", OracleType.Cursor);
                    prm1.Direction = ParameterDirection.Input;
                    prm2.Direction = ParameterDirection.Input;
                    prm3.Direction = ParameterDirection.Output;
                    prm1.Value = pagina;
                    prm2.Value = regxpagina;
                    cmd.Parameters.Add(prm1);
                    cmd.Parameters.Add(prm2);
                    cmd.Parameters.Add(prm3);

                    ProyectoBE objConsultaBE;
                    List<ProyectoBE> lstConsultaBE = new List<ProyectoBE>();
                    using (OracleDataReader objDRConsulta = cmd.ExecuteReader())
                    {
                        while (objDRConsulta.Read())
                        {
                            objConsultaBE = new ProyectoBE();
                            objConsultaBE.IdProyecto = Convert.ToInt32(objDRConsulta["IDPROYECTO"]);
                            objConsultaBE.Nombre = Convert.ToString(objDRConsulta["NOMBRE"]);
                            objConsultaBE.Descripcion = Convert.ToString(objDRConsulta["DESCRIPCION"]);
                            objConsultaBE.P03TipoProyecto = Convert.ToInt32(objDRConsulta["P03TIPOPROYECTO"]);
                            objConsultaBE.P03TipoProyectoDesc = Convert.ToString(objDRConsulta["P03TIPOPROYECTODESC"]);
                            objConsultaBE.UsuCre = Convert.ToString(objDRConsulta["USUCRE"]);
                            objConsultaBE.FecCre = Convert.ToDateTime(objDRConsulta["FECCRE"]);
                            objConsultaBE.UsuMod = Convert.ToString(objDRConsulta["USUMOD"]);
                            objConsultaBE.FecMod = Convert.ToDateTime(objDRConsulta["FECMOD"]);
                            lstConsultaBE.Add(objConsultaBE);
                        }
                        objDRConsulta.Close();
                    }
                    NewConexion.retClose();
                    return lstConsultaBE;
                }
                catch (Exception ex)
                {
                    string error = ex.ToString();
                    List<ProyectoBE> lstConsultaBE = new List<ProyectoBE>();
                    return lstConsultaBE;
                }
                finally
                {
                    if (NewConexion.conexion.State == ConnectionState.Open) NewConexion.retClose();
                }
            }


        }

        public int mInsertar(ProyectoBE proyecto)
        {
            
            try
            {
                Int32 id = 0;
                using (OracleCommand cmd = new OracleCommand())
                {
                    cmd.CommandText = "PKG_HECO_GLOBAL.SP_INSERTAR_PROYECTO";
                    cmd.CommandType = CommandType.StoredProcedure;

                    OracleParameter prm1 = new OracleParameter("PNOMBRE", OracleType.VarChar);
                    OracleParameter prm2 = new OracleParameter("PDESCRIPCION", OracleType.VarChar);
                    OracleParameter prm3 = new OracleParameter("PTIPOPROYECTO", OracleType.Int32);
                    OracleParameter prm4 = new OracleParameter("PUSUARIO", OracleType.VarChar);
                    OracleParameter prm5 = new OracleParameter("PIDPROY", OracleType.Int32);

                    prm1.Direction = ParameterDirection.Input;
                    prm2.Direction = ParameterDirection.Input;
                    prm3.Direction = ParameterDirection.Input;
                    prm4.Direction = ParameterDirection.Input;
                    prm5.Direction = ParameterDirection.Output;

                    prm1.Value = proyecto.Nombre;
                    prm2.Value = proyecto.Descripcion;
                    prm3.Value = proyecto.P03TipoProyecto;
                    prm4.Value = proyecto.UsuCre;
                    prm5.Value = proyecto.IdProyecto;                    

                    cmd.Parameters.Add(prm1);
                    cmd.Parameters.Add(prm2);
                    cmd.Parameters.Add(prm3);
                    cmd.Parameters.Add(prm4);
                    cmd.Parameters.Add(prm5);

                    using (DL_CONEXION NewConexion = new DL_CONEXION())
                    {
                        int ret = NewConexion.ejecutaSQL(cmd);
                        id = Convert.ToInt32(Convert.ToString(cmd.Parameters["PIDPROY"].Value));
                        return id;
                    }                    
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public int mModificar(ProyectoBE proyecto)
        {
            
            try
            {
                Int32 id = 0;
                using (OracleCommand cmd = new OracleCommand())
                {
                    cmd.CommandText = "PKG_HECO_GLOBAL.SP_MODIFICAR_PROYECTO";
                    cmd.CommandType = CommandType.StoredProcedure;

                    OracleParameter prm1 = new OracleParameter("PIDPROYECTO", OracleType.Int32);
                    OracleParameter prm2 = new OracleParameter("PNOMBRE", OracleType.VarChar);
                    OracleParameter prm3 = new OracleParameter("PDESCRIPCION", OracleType.VarChar);
                    OracleParameter prm4 = new OracleParameter("PTIPOPROYECTO", OracleType.Int32);
                    OracleParameter prm5 = new OracleParameter("PUSUARIO", OracleType.Int32);
                    OracleParameter prm6 = new OracleParameter("Pid", OracleType.Int32);

                    prm1.Direction = ParameterDirection.Input;
                    prm2.Direction = ParameterDirection.Input;
                    prm3.Direction = ParameterDirection.Input;
                    prm4.Direction = ParameterDirection.Input;
                    prm5.Direction = ParameterDirection.Input;
                    prm6.Direction = ParameterDirection.Output;

                    prm1.Value = proyecto.IdProyecto;
                    prm2.Value = proyecto.Nombre;
                    prm3.Value = proyecto.Descripcion;
                    prm4.Value = proyecto.P03TipoProyecto;
                    prm5.Value = proyecto.UsuMod;
                    prm6.Value = proyecto.IdProyecto;
                                        
                    cmd.Parameters.Add(prm1);
                    cmd.Parameters.Add(prm2);
                    cmd.Parameters.Add(prm3);
                    cmd.Parameters.Add(prm4);
                    cmd.Parameters.Add(prm5);
                    cmd.Parameters.Add(prm6);

                    using (DL_CONEXION NewConexion = new DL_CONEXION())
                    {
                        int ret = NewConexion.ejecutaSQL(cmd);
                        id = Convert.ToInt32(Convert.ToString(cmd.Parameters["PID"].Value));
                        return id;
                    }                    
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void mEliminar(ProyectoBE proyecto)
        {
            try
            {

                using (OracleCommand cmd = new OracleCommand())
                {
                    cmd.CommandText = "PKG_HECO_GLOBAL.SP_ELIMINAR_PROYECTO";
                    cmd.CommandType = CommandType.StoredProcedure;

                    OracleParameter prm1 = new OracleParameter("PIDPROYECTO", OracleType.Int32);
                    OracleParameter prm2 = new OracleParameter("PUSUARIOMOD", OracleType.VarChar);
                    OracleParameter prm3 = new OracleParameter("PIPMOD", OracleType.VarChar);

                    prm1.Direction = ParameterDirection.Input;
                    prm1.Value = proyecto.IdProyecto;
                    prm2.Direction = ParameterDirection.Input;
                    prm2.Value = proyecto.UsuMod;
                    prm3.Direction = ParameterDirection.Input;
                    prm3.Value = proyecto.IpMod;
                    cmd.Parameters.Add(prm1);
                    cmd.Parameters.Add(prm2);
                    cmd.Parameters.Add(prm3);

                    using (DL_CONEXION NewConexion = new DL_CONEXION())
                    {
                        int ret = NewConexion.ejecutaSQL(cmd);
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public int mObtenerCantTipAcceso(int idProyecto)
        {

            try
            {
                Int32 id = 0;

                using (OracleCommand cmd = new OracleCommand())
                {
                    cmd.CommandText = "PKG_HECO_GLOBAL.SP_OBTENER_CANT_COMPACCESO";
                    cmd.CommandType = CommandType.StoredProcedure;

                    OracleParameter prm1 = new OracleParameter("pIdProyecto", OracleType.Int32);
                    OracleParameter prm2 = new OracleParameter("pcantidad", OracleType.Int32);

                    prm1.Direction = ParameterDirection.Input;
                    prm2.Direction = ParameterDirection.Output;

                    prm1.Value = idProyecto;
                    cmd.Parameters.Add(prm1);
                    cmd.Parameters.Add(prm2);

                    using (DL_CONEXION NewConexion = new DL_CONEXION())
                    {
                        int ret = NewConexion.ejecutaSQL(cmd);
                        id = Convert.ToInt32(Convert.ToString(cmd.Parameters["pcantidad"].Value));
                        return id;
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
}
